package peca;
import javax.swing.ImageIcon;

import estrutura.Celula;
import estrutura.Peca;

public class Bispo extends Peca {

	public Bispo(CorPeca corPeca) {
		 StringBuilder caminhoImagem = new StringBuilder("images/bispo");
		 caminhoImagem.append(corPeca.sufix()).append(".png");
		 setImagem(new ImageIcon(getClass().getClassLoader().getResource(caminhoImagem.toString())));
		 setCor(corPeca);
		 setNome(corPeca == CorPeca.BRANCA ? BISPO_B : BISPO_P);
	}

	public Bispo() {}

	@Override
	public boolean isMovimentoValido(Celula origem, Celula destino,	Celula[][] celulas) {
		if(isRotaValida(origem, destino) && isNotPecaNoCaminho(origem, destino, celulas)){
			return true;
		}
		
		return false;
	}

	private boolean isRotaValida(final Celula origem, final Celula destino) {
		final int X = destino.getLinha() - origem.getLinha();
		final int Y = destino.getColuna() - origem.getColuna(); 		
		return X * Integer.signum(X) == Y * Integer.signum(Y);
	}

	private boolean isNotPecaNoCaminho(Celula origem, Celula destino, Celula[][] celulas) {
		
		if(destino.getPeca()!=null && origem.getPeca().getCor()==destino.getPeca().getCor()){
			return false;
		}
		
		final int Y = destino.getColuna() - origem.getColuna();
		final int X = destino.getLinha() - origem.getLinha();
		
		int linhaOrigem = origem.getLinha();
		int colunaOrigem = origem.getColuna();
		
		while(Integer.signum(X) == -1 ? linhaOrigem > destino.getLinha() : linhaOrigem < destino.getLinha()){
			linhaOrigem = linhaOrigem + Integer.signum(X);
			colunaOrigem = colunaOrigem + Integer.signum(Y);
			Celula celula = celulas[linhaOrigem][colunaOrigem];
			if(celula.getPeca() != null && celula != destino){
				return false;
			}
		}
		
		return true;
	}	
}
